import config from '@/config/index.js'
import request from '@/utils/request'

/**
 * 上传照片
 * @param {Object} data - 上传数据
 * @param {File|string} data.file - 照片文件或文件路径(小程序环境)
 * @param {string} [data.title] - 照片标题
 * @param {string} [data.description] - 照片描述
 * @param {string} [data.status] - 照片状态(0-私有正常，1-公开正常)
 * @param {number} [data.albumId] - 关联的相册ID
 * @returns {Promise}
 */
export function uploadPhoto(data) {
  // 小程序环境使用 uni.uploadFile
  if (typeof data.file === 'string') {
    return new Promise((resolve, reject) => {
      const formData = {};
      if (data.title) formData.title = data.title;
      if (data.description) formData.description = data.description;
      if (data.status !== undefined) formData.status = data.status;
      if (data.albumId) formData.albumId = data.albumId;
      
      uni.uploadFile({
        url: config.baseURL + '/v1/photo/upload',
        filePath: data.file,
        name: 'file',
        formData: formData,
        header: {
          'Authorization': 'Bearer ' + uni.getStorageSync('token')
        },
        success: (uploadRes) => {
          try {
            const result = JSON.parse(uploadRes.data);
            if (result.success) {
              resolve(result);
            } else {
              reject(new Error(result.message || '上传失败'));
            }
          } catch (e) {
            reject(new Error('解析上传响应失败'));
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  } else {
    // H5环境使用原有的上传方式
    const formData = new FormData();
    formData.append('file', data.file);
    if (data.title) formData.append('title', data.title);
    if (data.description) formData.append('description', data.description);
    if (data.status !== undefined) formData.append('status', data.status);
    if (data.albumId) formData.append('albumId', data.albumId);
    
    return request({
      url: '/v1/photo/upload',
      method: 'post',
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  }
}

/**
 * 更新照片信息
 * @param {number} photoId - 照片ID
 * @param {Object} data - 更新数据
 * @param {string} [data.title] - 照片标题
 * @param {string} [data.description] - 照片描述
 * @param {string} [data.status] - 照片状态
 * @returns {Promise}
 */
export function updatePhoto(photoId, data) {
  return request({
    url: `/v1/photo/${photoId}`,
    method: 'put',
    data
  })
}

/**
 * 获取照片分页列表
 * @param {Object} params - 查询参数
 * @param {number} params.current - 当前页码
 * @param {number} params.size - 每页大小
 * @param {string} [params.titleLike] - 照片标题(模糊查询)
 * @param {number[]} [params.userIdList] - 用户ID列表
 * @param {string} [params.uploadTimeStart] - 上传开始时间
 * @param {string} [params.uploadTimeEnd] - 上传结束时间
 * @param {string} [params.status] - 状态
 * @param {string} [params.isApproved] - 审核状态
 * @returns {Promise}
 */
export function getPhotoPage(params) {
  console.log(params)
  // 创建一个新的 URLSearchParams 实例
  const searchParams = new URLSearchParams()
  
  // 添加非数组参数
  Object.entries(params).forEach(([key, value]) => {
    if (value !== undefined && value !== null && !Array.isArray(value)) {
      searchParams.append(key, value)
    }
  })
  
  // 特殊处理数组参数
  if (params.userIdList?.length) {
    params.userIdList.forEach(id => {
      searchParams.append('userIdList', id)
    })
  }

  return request({
    url: '/v1/photo/page',
      method: 'get',
      params: searchParams
  })
}

/**
 * 审批单个照片
 * @param {number} photoId - 照片ID
 * @param {string} status - 审批状态(0：拒绝，1：批准)
 * @returns {Promise}
 */
export function approvePhoto(photoId, status) {
  return request({
    url: `/v1/photo/approve/${photoId}`,
    method: 'put',
    params: { status }
  })
}

/**
 * 批量审批照片
 * @param {Object} data - 审批数据
 * @param {number[]} data.photoIdList - 照片ID列表
 * @param {string} data.status - 审批状态(0-未审核，1-已通过，2-未通过)
 * @returns {Promise}
 */
export function batchApprovePhotos(data) {
  return request({
    url: '/v1/photo/reject',
    method: 'put',
    data
  })
}

/**
 * 删除单个照片
 * @param {number} photoId - 照片ID
 * @returns {Promise}
 */
export function deletePhoto(photoId) {
  return request({
    url: `/v1/photo/${photoId}`,
    method: 'delete'
  })
}

/**
 * 批量删除照片
 * @param {Object} data - 包含照片ID列表的对象
 * @param {number[]} data.photoIds - 照片ID列表
 * @returns {Promise}
 */
export function batchDeletePhotos(data) {
  return request({
    url: '/v1/photo/batch',
    method: 'delete',
    data
  })
}

/**
 * 获取首页我的精选照片
 * @returns {Promise} - 返回精选照片列表
 */
export function getMyFavoritePhotos() {
  return request({
    url: '/v1/photo/myFavorite',
    method: 'get'
  })
}

/**
 * 获取最近上传的照片
 * @param {Object} params - 查询参数
 * @param {number} params.current - 当前页码
 * @param {number} params.size - 每页大小
 * @returns {Promise} - 返回分页照片数据
 */
export function getRecentPhotos(params) {
  return request({
    url: '/v1/photo/recent',
    method: 'get',
    params
  })
}

/**
 * 获取单个照片详情
 * @param {number|string} photoId - 照片ID
 * @returns {Promise} - 返回照片详情
 */
export function getPhotoDetail(photoId) {
  return request({
    url: `/v1/photo/${photoId}`,
    method: 'get'
  })
}

/**
 * 点赞照片
 * @param {number} photoId - 照片ID
 */
export function likePhoto(photoId) {
  return request({
    url: `/v1/photo/like/${photoId}`,
    method: 'POST'
  })
}

/**
 * 取消点赞照片
 * @param {number} photoId - 照片ID
 */
export function unlikePhoto(photoId) {
  return request({
    url: `/v1/photo/like/${photoId}`,
    method: 'DELETE'
  })
}

/**
 * 收藏照片
 * @param {number} photoId - 照片ID
 * @returns {Promise} 返回收藏结果
 */
export function favoritePhoto(photoId) {
  return request({
    url: `/v1/photo/favorite/${photoId}`,
    method: 'post'
  })
}

/**
 * 取消收藏照片
 * @param {number} photoId - 照片ID
 * @returns {Promise} 返回取消收藏结果
 */
export function unFavoritePhoto(photoId) {
  return request({
    url: `/v1/photo/favorite/${photoId}`,
    method: 'delete'
  })
}

/**
 * 分页获取精选照片
 * @param {Object} params - 分页参数
 * @returns {Promise} 返回精选照片列表
 */
export function getFeaturedPhotos(params) {
  return request({
    url: '/v1/photo/featured',
    method: 'get',
    params
  })
}

/**
 * 获取照片评论列表
 * @param {Object} params - 分页参数
 * @returns {Promise} 返回评论列表数据
 */
export function getPhotoComments(params) {
  return request({
    url: '/v1/photo/comment',
    method: 'get',
    params
  })
}

/**
 * 获取热门话题列表
 * @returns {Promise} 返回热门话题列表
 */
export function getHotTopics() {
  return request({
    url: '/v1/photo/topics',
    method: 'get'
  })
}